home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / tex / itrns211.zip / SRC / ILEX.L < prev    next >
Text File  |  1991-10-15  |  15KB  |  383 lines

  1. %e 1500
  2. %p 3100
  3. %a 3000
  4.  
  5. %{
  6. /* above directives increase the various table sizes used by Lex */
  7.  
  8. /*
  9.  *========================================================================== 
  10.  * Copyright 1991 Avinash Chopde, All Rights Reserved.
  11.  *
  12.  * Permission to use, copy, modify and distribute this software and its
  13.  * documentation for any purpose is hereby granted without fee, provided that
  14.  * the above copyright notice appear in all copies and that both that
  15.  * copyright notice and this permission notice appear in supporting
  16.  * documentation, and that the name of Avinash Chopde not be used in
  17.  * advertising or publicity pertaining to distribution of the software
  18.  * without specific, written prior permission.
  19.  * Avinash Chopde makes no representations about the suitability of this
  20.  * software for any purpose.
  21.  * It is provided "as is" without express or implied warranty.
  22.  *
  23.  * AVINASH CHOPDE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
  24.  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
  25.  * IN NO EVENT SHALL AVINASH CHOPDE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
  26.  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
  27.  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
  28.  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
  29.  * OF THIS SOFTWARE.
  30.  *
  31.  * Author:  Avinash Chopde, 1991
  32.  *        C2 Colonial Drive #4, Andover, MA 01810, USA.
  33.  *
  34.  */
  35.  
  36. static char S_RCSID[] = "$Header: e:/itrans/src/rcs/ilex.l 1.8 91/10/15 00:13:49 avinash Exp $";
  37.  
  38. #include "itrans.h"
  39. #include "ifm.h"
  40.  
  41. #ifdef MSDOS
  42. #include "y_tab.h"
  43. #else
  44. #include "y.tab.h"
  45. #endif
  46.  
  47. #ifdef YYSTYPE
  48. extern YYSTYPE  yylval;
  49. #else
  50. extern int yylval;
  51. #endif
  52.  
  53. extern int G_lineno;
  54. extern int in_letter(); /* returns TRUE if the parse (iyacc.y) is in the
  55.              * middle of scanning some letter.
  56.              * Used to decide whether to tell the parser to
  57.              * stop looking for more characters, and
  58.              * terminate the letter.
  59.              * That is done by sending in a ENDPREV_TOK.
  60.              */
  61. extern char G_endprev_str[]; /* defined in iyacc.y, used to pass string
  62.                   * to process
  63.                   */
  64.  
  65. static S_lex_ichar(int t);
  66. static S_print(char* t);
  67. static S_skipcomments();
  68.  
  69. static int    S_lang_tok = -1; /* which language being scanned... */
  70.  
  71. %}
  72.  
  73. %START ITEXT DCOMMAND
  74. %%
  75.  
  76. "\\%"            {   
  77.               /* seen \% in the input, complete current
  78.                * word first, and then echo out
  79.                * the chars in G_endprev_str.
  80.                */
  81.                 if (in_letter()) {
  82.                 S_print("ichar \\ %");
  83.                 strcpy(G_endprev_str, "\\%");
  84.                 return (yylval=ENDPREV_TOK);
  85.                 } else {
  86.                 ECHO;
  87.                 }
  88.             }
  89.  
  90. <ITEXT>"\\"        {   
  91.                /* seen a single backslash */
  92.                if (in_letter()) {
  93.                 /* need to complete current word, send
  94.                  * a ENDPREV token to the parser.
  95.                  */
  96.                 S_print("ichar \\");
  97.                 /* unput('\\');   ?? use yyless() here */
  98.                     yyless(0);
  99.                     G_endprev_str[0] = '\0';
  100.                     return (yylval=ENDPREV_TOK);
  101.                 } else {
  102.                 BEGIN  DCOMMAND;
  103.                 }
  104.             }
  105.  
  106. <ITEXT>"%"        { S_print("ichar %");
  107.                   if (in_letter()) {
  108.                 /* need to complete current word, send
  109.                  * a ENDPREV token to the parser.
  110.                  */
  111.                  /* unput('%'); handle comment next time around */
  112.                  yyless(0);
  113.               }
  114.               return S_skipcomments();
  115.               /* is a comment, until end-of-line */
  116.             }
  117.  
  118. "%"            { S_skipcomments(); putchar('\n'); }
  119.  
  120. <ITEXT>"a"        {S_lex_ichar(A_TOK); return (yylval =  A_TOK);    }
  121. <ITEXT>"aa"        {S_lex_ichar(AA_TOK); return (yylval =  AA_TOK);}
  122. <ITEXT>"A"        {S_lex_ichar(AA_TOK); return (yylval =  AA_TOK);}
  123. <ITEXT>"i"        {S_lex_ichar(I_TOK); return (yylval =  I_TOK);    }
  124. <ITEXT>"ii"        {S_lex_ichar(II_TOK); return (yylval =  II_TOK);}
  125. <ITEXT>"I"        {S_lex_ichar(II_TOK); return (yylval =  II_TOK);}
  126. <ITEXT>"u"        {S_lex_ichar(U_TOK); return (yylval =  U_TOK);    }
  127. <ITEXT>"U"        {S_lex_ichar(UU_TOK); return (yylval =  UU_TOK);}
  128. <ITEXT>"uu"        {S_lex_ichar(UU_TOK); return (yylval =  UU_TOK);}
  129. <ITEXT>"Ri"        {
  130.               switch(S_lang_tok) {
  131.               case TAMIL_TOK:
  132.                   /* unput('i'); ?? use yyless() here XXX */
  133.                   yyless(1);
  134.                   return (yylval =  RRA_TOK);
  135.                   break;
  136.               default:
  137.                   return (yylval =  RI_TOK);
  138.               }
  139.             }
  140. <ITEXT>"RI"        {
  141.               switch(S_lang_tok) {
  142.               case TAMIL_TOK:
  143.                   /* unput('I'); ?? use yyless() here XXX */
  144.                   yyless(1);
  145.                   return (yylval =  RRA_TOK);
  146.                   break;
  147.               default:
  148.                   return (yylval =  RII_TOK);
  149.               }
  150.             }
  151. <ITEXT>"Li"        {
  152.               switch(S_lang_tok) {
  153.               case TAMIL_TOK:
  154.                   /* unput('i'); ?? use yyless() here XXX */
  155.                   yyless(1);
  156.                   return (yylval =  LDA_TOK);
  157.                   break;
  158.               default:
  159.                   return (yylval =  LI_TOK);
  160.               }
  161.             }
  162. <ITEXT>"LI"        {
  163.               switch(S_lang_tok) {
  164.               case TAMIL_TOK:
  165.                   /* unput('I'); ?? use yyless() here XXX */
  166.                   yyless(1);
  167.                   return (yylval =  LDA_TOK);
  168.                   break;
  169.               default:
  170.                   return (yylval =  LII_TOK);
  171.               }
  172.             }
  173. <ITEXT>"e"        {S_lex_ichar(AY_TOK); return (yylval =  AY_TOK);}
  174. <ITEXT>"E"        {S_lex_ichar(AAY_TOK); return (yylval =  AAY_TOK);}
  175. <ITEXT>"ai"        {S_lex_ichar(AI_TOK); return (yylval =  AI_TOK);}
  176. <ITEXT>"o"        {S_lex_ichar(O_TOK); return (yylval =  O_TOK);    }
  177. <ITEXT>"O"        {S_lex_ichar(OO_TOK); return (yylval =  OO_TOK);}
  178. <ITEXT>"au"        {S_lex_ichar(AU_TOK); return (yylval =  AU_TOK);}
  179. <ITEXT>"aM"        {S_lex_ichar(AM_TOK); return (yylval =  AM_TOK);}
  180. <ITEXT>"H"        {S_lex_ichar(AHA_TOK); return (yylval =  AHA_TOK);}
  181. <ITEXT>"k"        {S_lex_ichar(KA_TOK); return (yylval =  KA_TOK);}
  182. <ITEXT>"q"        {S_lex_ichar(KADOT_TOK); return (yylval =  KADOT_TOK);}
  183. <ITEXT>"kh"        {S_lex_ichar(KHA_TOK); return (yylval =  KHA_TOK);}
  184. <ITEXT>"K"        {S_lex_ichar(KHADOT_TOK); return (yylval = KHADOT_TOK);}
  185. <ITEXT>"gh"        {S_lex_ichar(GHA_TOK); return (yylval =  GHA_TOK);}
  186. <ITEXT>"g"        {S_lex_ichar(GA_TOK); return (yylval =  GA_TOK);}
  187. <ITEXT>"G"        {S_lex_ichar(GADOT_TOK); return (yylval =  GADOT_TOK);}
  188. <ITEXT>"ng"        {S_lex_ichar(NGA_TOK); return (yylval =  NGA_TOK);}
  189. <ITEXT>"chh"        {S_lex_ichar(CHHA_TOK); return (yylval =  CHHA_TOK);}
  190. <ITEXT>"ch"        {S_lex_ichar(CHA_TOK); return (yylval =  CHA_TOK);}
  191. <ITEXT>"j"        {S_lex_ichar(JA_TOK); return (yylval =  JA_TOK);}
  192. <ITEXT>"z"        {S_lex_ichar(JADOT_TOK); return (yylval =  JADOT_TOK);}
  193. <ITEXT>"jh"        {S_lex_ichar(JHA_TOK); return (yylval =  JHA_TOK);}
  194. <ITEXT>"jn"        {S_lex_ichar(JNH_TOK); return (yylval =  JNH_TOK);}
  195. <ITEXT>"T"        {S_lex_ichar(TTA_TOK); return (yylval =  TTA_TOK);}
  196. <ITEXT>"Th"        {S_lex_ichar(TTHA_TOK); return (yylval =  TTHA_TOK);}
  197. <ITEXT>"D"        {S_lex_ichar(DDA_TOK); return (yylval =  DDA_TOK);}
  198. <ITEXT>".D"        {S_lex_ichar(DDADOT_TOK);return (yylval=DDADOT_TOK);}
  199. <ITEXT>"Dh"        {S_lex_ichar(DDHA_TOK); return (yylval =  DDHA_TOK);}
  200. <ITEXT>".Dh"        {S_lex_ichar(DDHADOT_TOK);return (yylval=DDHADOT_TOK);}
  201. <ITEXT>"N"        {S_lex_ichar(NNA_TOK); return (yylval =  NNA_TOK);}
  202. <ITEXT>"t"        {S_lex_ichar(TA_TOK); return (yylval =  TA_TOK);}
  203. <ITEXT>"th"        {S_lex_ichar(THA_TOK); return (yylval =  THA_TOK);}
  204. <ITEXT>"d"        {S_lex_ichar(DA_TOK); return (yylval =  DA_TOK);}
  205. <ITEXT>"dh"        {S_lex_ichar(DHA_TOK); return (yylval =  DHA_TOK);}
  206. <ITEXT>"n"        {S_lex_ichar(NA_TOK); return (yylval =  NA_TOK);}
  207. <ITEXT>"p"        {S_lex_ichar(PA_TOK); return (yylval =  PA_TOK);}
  208. <ITEXT>"ph"        {S_lex_ichar(PHA_TOK); return (yylval =  PHA_TOK);}
  209. <ITEXT>"f"        {S_lex_ichar(PHADOT_TOK); return (yylval = PHADOT_TOK);}
  210. <ITEXT>"bh"        {S_lex_ichar(BHA_TOK); return (yylval =  BHA_TOK);}
  211. <ITEXT>"b"        {S_lex_ichar(BA_TOK); return (yylval =  BA_TOK);}
  212. <ITEXT>"m"        {S_lex_ichar(MA_TOK); return (yylval =  MA_TOK);}
  213. <ITEXT>"y"        {S_lex_ichar(YA_TOK); return (yylval =  YA_TOK);}
  214. <ITEXT>"r"        {S_lex_ichar(RA_TOK); return (yylval =  RA_TOK);}
  215. <ITEXT>"v"        {S_lex_ichar(VA_TOK); return (yylval =  VA_TOK);}
  216. <ITEXT>"shh"        {S_lex_ichar(SHHA_TOK); return (yylval =  SHHA_TOK);}
  217. <ITEXT>"sh"        {S_lex_ichar(SHA_TOK); return (yylval =  SHA_TOK);}
  218. <ITEXT>"s"        {S_lex_ichar(SA_TOK); return (yylval =  SA_TOK);}
  219. <ITEXT>"h"        {S_lex_ichar(HA_TOK); return (yylval =  HA_TOK);}
  220. <ITEXT>"ld"        {S_lex_ichar(